package daily.oct;

public class lc1716 {
    /*
    直接使用等差数列进行计算；分别计算存满周的总钱数以及未存满周（当周）的存钱情况，然后相加即可。
    属于取巧做法。
    本意是使用数组记录每天的存钱数然后相加，但是在实现时被卡死。
     */
    public int totalMoney(int n) {
        int week=n/7;//向下取值，得到完整存钱的周数
        int day=n%7;//得到新一周存钱的天数
        int[] currentWeek={0,0,0,0,0,0,0};
        currentWeek[0]=week+1;//先规定周一的取值，为基准计算后续天数的存钱数
        int tempSum=currentWeek[0];//计算当周的总存钱数
        for(int i=1;i<day;i++){
            currentWeek[i]=currentWeek[i-1]+1;
            tempSum+=currentWeek[i];
        }

        if (week==0){//连第一周都没存完，直接返回tempSum
            return tempSum;
        }else if (day==0){//此时新的一周也被存完
            //直接计算week周的总存钱数即可
            return (28+28+7*(week-1))*week/2;
        } else {/*此时情况为：存在未存满的一周
              以第一周的存钱总量（1到7的总和为28）为基准，每周存钱数依次加7
              存满了week次，在此处计算存满周的总和；未存满的周总和是tempSum
             * 计算存满周钱总数的方式：等差数列
             * 首项28（存满的第一周），共week项，公差7，即末项为28+7（week-1）
             * 总和为：（28+（28+7（week-1）））*week/2
             */
            int sum=(28+28+7*(week-1))*week/2;
            int totalSum=sum+tempSum;
            return totalSum;
        }
    }

    public static void main(String[] args) {
        lc1716 lc1716 = new lc1716();
        System.out.println(lc1716.totalMoney(4));
        System.out.println(lc1716.totalMoney(10));
        System.out.println(lc1716.totalMoney(20));
        System.out.println(lc1716.totalMoney(26));
        System.out.println(lc1716.totalMoney(175));
    }
}
